package com.bjsxt;
/**Lambda表达式中的闭包问题*/
/*闭包的本质就是代码片断。所以闭包可以理解成一个代码的引用，在Java中匿名内部类
* 也是闭包的一种实方式*/
 /*在闭包中访问外部的变量时，外部变量必须是final类型，虚拟机会帮我们加上final
 修饰关键字*/

public class Test07 {
    public static void main(String[] args) {
        int num = 10;
        //用NoReturnNoParam 示例
        //用匿名内部类作为 无参数，无返回值 接口 的实现
        //这接口可以 new 但要重写匿名内部类
        //重写部分就是闭包
        NoReturnNoParam noReturnNoParam = new NoReturnNoParam() {
            @Override
            public void method() {
                System.out.println(num);
            }
        };
        //num++;  这样上面的System.out.println(num);中的num
        // 会报错，因为在闭包中访问外部的变量时，外部变量在编译时自动改成final类型
        noReturnNoParam.method();

        System.out.println("----Lambda表达式-----");
        NoReturnNoParam noReturnNoParam1 = ()-> System.out.println(num);
       // num++; 已经被 final修饰，不可以修改
        noReturnNoParam1.method();


    }
}
